home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Language/OS - Multiplatform Resource Library
/
LANGUAGE OS.iso
/
et
/
et3_0-a1.lha
/
et3
/
src
/
TextItem.C
< prev
next >
Wrap
C/C++ Source or Header
|
1992-07-06
|
2KB
|
119 lines
#ifdef __GNUG__
#pragma implementation
#endif
#include "TextItem.h"
#include "Class.h"
#include "String.h"
#include "Look.h"
//---- TextItem ----------------------------------------------------------------
NewMetaImpl(TextItem,VObject, (TP(text), TP(font), T(border)));
TextItem::TextItem(char *t, Font *f, Point b)
{
font= f;
border= b;
text= 0;
strreplace(&text, t);
SetFlag(eVObjVFixed);
}
TextItem::TextItem(int id, char *t, Font *f, Point b) : VObject(id)
{
font= f;
border= b;
text= 0;
strreplace(&text, t);
SetFlag(eVObjVFixed);
}
TextItem::~TextItem()
{
SafeDelete(text);
}
void TextItem::SetString(char *t, bool redraw)
{
strreplace(&text, t);
SetContentRect(Rectangle(GetOrigin(), GetMinSize().extent), redraw);
}
void TextItem::SetFString(bool redraw, char *va_(fmt), ...)
{
va_list ap;
va_start(ap,va_(fmt));
if (redraw) {
InvalidateRect(contentRect);
strfreplace(&text, va_(fmt), ap);
CalcExtent();
InvalidateRect(contentRect);
} else
strfreplace(&text, va_(fmt), ap);
Changed();
va_end(ap);
}
void TextItem::SetFont(Font *fp)
{
font= fp;
}
Metric TextItem::GetMinSize()
{
return Metric(font->Width((byte*)text), font->Spacing(), font->Ascender()).Expand(border);
}
void TextItem::SetExtent(Point e)
{
// VObject::SetExtent(GetMinSize().extent);
VObject::SetExtent(e);
}
char *TextItem::AsString()
{
return text;
}
void TextItem::Draw(Rectangle)
{
if (text && *text) {
Point p= contentRect.origin+border;
p.y+= font->Ascender();
GrShowString(font, Enabled() ? gInkBlack : gLook->DisableInk(), p, (byte*)text);
}
}
int TextItem::Compare(Object *op)
{
return StrCmp((byte*)text, (byte*)Guard(op,TextItem)->text, -1, sortmap);
}
bool TextItem::IsEqual(Object *op)
{
if (op == 0 || ! op->IsKindOf(TextItem))
return FALSE;
byte *s1= (byte*)AsString(), *s2= (byte*)op->AsString();
if (s1 == 0 || s2 == 0)
return FALSE;
return StrCmp(s1, s2, -1, sortmap) == 0;
}
OStream& TextItem::PrintOn (OStream &s)
{
VObject::PrintOn(s);
s << font SP << border SP;
return s.PrintString(text);
}
IStream& TextItem::ReadFrom(IStream &s)
{
SafeDelete(text);
VObject::ReadFrom(s);
s >> font >> border;
return s.ReadString(&text);
}